package lol.clann.bukkit.pluginboot.context;

import cpw.mods.fml.common.Loader;
import lol.clann.bukkit.pluginboot.util.PluginUtils;
import lol.clann.clannboot.annotation.svc.Filter;
import lol.clann.clannboot.annotation.svc.FilterType;
import lol.clann.clannboot.context.ModuleContext;
import lol.clann.clannboot.context.ServiceFilterContext;
import lol.clann.clannboot.module.svc.ServiceHolder;
import org.bukkit.Material;

import java.util.function.BiPredicate;

/**
 * @author pyz
 * @date 2018/9/16 下午7:21
 */
public class ServiceFilterRegister {
    static {
        BiPredicate<ServiceHolder, Filter> filter = null;

        // Material过滤
        filter = (holder, config) -> {
            for (String material : config.value()) {
                if (Material.getMaterial(material) == null) {
                    return false;
                }
            }
            return true;
        };
        ServiceFilterContext.registerFilter(ModuleContext.rootModuleId, FilterType.material, filter, false);

        // plugin过滤
        filter = (holder, config) -> {
            for (String plugin : config.value()) {
                if (PluginUtils.getPlugin(plugin) == null) {
                    return false;
                }
            }
            return true;
        };
        ServiceFilterContext.registerFilter(ModuleContext.rootModuleId, FilterType.plugin, filter, false);

        // mod过滤
        filter = (holder, config) -> {
            for (String mod : config.value()) {
                if (!Loader.isModLoaded(mod)) {
                    return false;
                }
            }
            return true;
        };
        ServiceFilterContext.registerFilter(ModuleContext.rootModuleId, FilterType.mod, filter, false);
    }

}
